package br.com.beans;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import org.hibernate.Query;
import org.hibernate.Session;

import br.com.dominio.Node;
import br.com.util.Conexão;

public class NodeList {

	// Abre uma conexão com o banco de dados
	private static Session sessao;
	private List<Node> listaNode = new ArrayList<Node>();

	private Map<String, Integer> listaIdNode = new TreeMap<String, Integer>();
	private Map<String, String> listaTipoNode = new TreeMap<String, String>();
	private Map<String, String> listaModeloNode = new TreeMap<String, String>();
	private Map<String, String> listaVerFirmwareNode = new TreeMap<String, String>();
	private Map<String, String> listaDataInstalaçãoNode = new TreeMap<String, String>();

	public NodeList() {

	}

	@SuppressWarnings("unchecked")
	public NodeList(String nomeCPU) {

		try {

			if (sessao == null) {
				sessao = new Conexão().getSession();

				System.out.println("NodeList >> Sessão aberta com sucesso.");
			}

			/*
			 * System.out.println("NodeList >> "
			 * + nomeCPU + " requisitando NodeList..");
			 */

			// Conseguindo um objeto CPU com o nome dela passada como
			// argumento no construtor
			Query q = sessao.createQuery("from CPU c where c.idCPU = :nomeCPU ");
			q.setParameter("nomeCPU", nomeCPU);

			// Conseguindo a lista de nodes por cpu
			Query nodesPorCpu = sessao.createQuery("from Node n where n.cpu = :objCPU ");
			nodesPorCpu.setEntity("objCPU", q.uniqueResult());
			listaNode = nodesPorCpu.list();

			for (Node n : listaNode) {

				this.listaIdNode.put((String.valueOf(n.getIdNode())), n.getIdNode());
				this.listaDataInstalaçãoNode.put((String.valueOf(n.getIdNode())),
						String.valueOf(n.getDataInstalacao()));
				this.listaModeloNode.put((String.valueOf(n.getIdNode())),
						String.valueOf(n.getModelo()));
				this.listaTipoNode.put((String.valueOf(n.getIdNode())),
						String.valueOf(n.getTipo()));
				this.listaVerFirmwareNode.put((String.valueOf(n.getIdNode())),
						String.valueOf(n.getVersaoFirmware()));

			}

			int n = listaNode.size();
			/*
			 * System.out.println("NodeList >> Retornando "
			 * + n + " itens.");
			 */

		}

		catch (Exception e) {
			System.err.println("Erro na aquisição de sessão na classe NodeList \n"
					+ e);
		}

	}

	public List<Node> getListaNode() {
		return listaNode;
	}

	public Map<String, Integer> getListaIdNode() {

		return listaIdNode;
	}

	public Map<String, String> getListaTipoNode() {
		return listaTipoNode;
	}

	public Map<String, String> getListaModeloNode() {
		return listaModeloNode;
	}

	public Map<String, String> getListaVerFirmwareNode() {
		return listaVerFirmwareNode;
	}

	public Map<String, String> getListaDataInstalaçãoNode() {
		return listaDataInstalaçãoNode;
	}

}
